SIMULATE

//tok gondola
		GENERATE 120,80,150					//Gondole dolaze na svakih 120+-80 sec, prva posle 15 sec
		MARK 1								//Upisujemo u parametar 1 trenutno vreme
		QUEUE GONDOLE						//Gondole čekaju u redu pred platoom
		SEIZE GPLATO						//Gondola zaposeda plato
		TABULATE CEKGON						//Snimamo vreme čekanja u histogram

		SAVEVALUE BRUK,0					//Postavljamo broj ukrcanih skijaša na 0
		SAVEVALUE VRUK,0					//Postavljamo vreme ukrcavanja na 0

IZVADI: TEST G CH$SPLATO,0,POLAZAK			//Ako se još nije ukrcalo 12 proveravamo ima li još skijaša na
											//platou, ako ima vraćamo se gore da ih ukrcamo, a ako nema polazimo
		UNLINK SPLATO,UKRC,1				//Uzimamo jednog skijaša iz lanca i šaljemo ga dalje u njegovom toku
		SAVEVALUE BRUK+,1					//Inkrementujemo broj ukrcanih
		MARK 1								//Upisijemo u parametar 1 trenutno vreme
		ADVANCE 10,2						//Čekamo da se skijaš ukrca
		SAVEVALUE VRUK+,VREME				//Dodajemo njegovo vreme ukrcavanja u promenljivu
		TEST EQ X$BRUK,12,IZVADI			//Proveravamo da li se ukrcalo 12 (ako jeste polazimo)

POLAZAK:TABULATE VUKTAB						//Snimamo u tabelu ukupno vreme ukrcavanja
		TABULATE BUKTAB						//Snimamo u tabelu broj ukrcanih skijaša
		ADVANCE 15							//Čekamo 15 sekundi
		DEPART GONDOLE						//Sada izlazimo iz reda
		RELEASE GPLATO						//I oslobađamo plato za sledeću gondolu
		TERMINATE							//Gondola je otišla
//kraj toka gondola

//tok skijaša
		GENERATE 35,13						//Skijaši dolaze sa terena svakih 35+-13 sec
		GENERATE 140,60						//Skijaši dolaze sa skojanja svakih 140+-60 sec
		TRANSFER 0.75,,DALJE				//25% ide dalje, a ostali (75%) na blagajnu (naredbe ispod)
		ADVANCE 40,10						//Čekanje na blagajni 40+-10 sec
		SAVEVALUE DNEVNI+,1					//Inkrementujemo brojač prodatih karata
		SAVEVALUE PRIHOD+,10				//Povećavamo prihod od prodaje

		MARK 1
DALJE:	TEST L Q$QK2,Q$QK1,TEST13			//Ako na kapiji 1 ima manje ljudi nego na kapiji 2 testiramo 1 i 3
											//a ako nema onda testiramo 2 i 3
		TEST L Q$QK3,Q$QK2,K2				//Ako na 3 ima manje nego na 2 idemo na 3, u suprotnom na 2
		TRANSFER ,K3
TEST13: TEST GE Q$QK3,Q$QK1,K3				//Ako na 1 ima više ili isto kao na 3 idemo na 1,
											//a ako ima manje idemo na 3

K1:		QUEUE QK1							//Red pred kapijom 1
		SEIZE KAP1							//Zaposedajne kapije 1
		TRANSFER ,PROLAZ
K2:		QUEUE QK2							//Red pred kapijom 2
		SEIZE KAP2							//Zaposedajne kapije 2
		TRANSFER ,PROLAZ
K3:		QUEUE QK3							//Red pred kapijom 3
		SEIZE KAP3							//Zaposedajne kapije 3

PROLAZ:	TABULATE CEKSKI						//Snimamo vreme čekanja u redu
		ADVANCE 8,4							//Prolazak kroz kapiju
		DEPART QK1							//Napuštanje redova čekanje
		DEPART QK2
		DEPART QK3
		RELEASE KAP1						//Oslobađanje kapija
		RELEASE KAP2
		RELEASE KAP3

		LINK SPLATO,FIFO					//Skijaši ulaze u red na platou
UKRC:	TERMINATE							//Ovde se skijaš ukrcao
//kraj toka skijaša

GENERATE 3600								//Ovo je brojač 24 sata, generišemo transakciju na svaki sat (3600 sec)
TERMINATE 1									//i smanjujemo terminacioni brojač za 1, dole na kraju smo startovali
											//sa brojačem postavljenim na 24


PRIHOD INITIAL 0							//promenljiva koja beleži prihod
DNEVNI INITIAL 0							//broj prodatih karata
UKUPNO INITIAL 0							//ukupno ukrcanih skijaša
BRUK INITIAL 0								//broj ukrcanih u trenutnu gondlu
VRUK INITIAL 0								//vreme trenutne gondole
VREME VARIABLE C1-P1						//račun vremena ukracavanja jednog skijaša
VUKTAB TABLE X$VRUK,15,30,6					//histogram vremena ukrcavanja po gondoli
BUKTAB TABLE X$BRUK,2,2,6					//histogram broja skijaša po gondoli
CEKGON TABLE V$VREME,60,60,5				//histogram za vreme čekanja gondola
CEKSKI TABLE V$VREME,30,30,5				//histogram za vreme čekanja pred 3 kapije

START 24									//Start sa terminacionim brojačem postavljenim na 24 (za 24 sata)
END


+-------------------+
| Dodatni komentari |
+-------------------+

Blok ADVANCE koji se odnosi na vreme ukrcavanja jednog skijaša se nalazi u okviru toka gondola, a ne u okviru toka skijaša, jer i gondola čeka zajedno sa skijašem, pošto je vreme čekanja nasumično određeno verovatnoćom, ne možemo da imamo dva ADVANCE bloka za istu stvar (u stvari može ali je zapetljano) pa ga stavljamo u tok gondola jer u suštini ne moramo da vodimo računa o skijašima kad dođu na red za ukrcavanje i taj tok možemo da okončamo odmah po izvlačenju skijaša iz lanca.

Za biranje najkraćeg reda koristio sam klasičnu tehniku uzastopnog poređenja sa trenutnim minimumom, koja je, verujem, poznata iz struktura podataka i algoritama. Prvo poredimo prvi i drugo red, ako je drugi kraći poredimo drugi i treći, a ako drugi nije kraći poredimo prvi i treći. Posle u drugoj proveri poredimo prvi ili drugi sa trećim, ako je treći kraći biramo njega, ako nije biramo onaj prethodni koji je izabran u prvoj proveri.